define(function(require){
	var $=require("jq");
	/**
	@幻灯片J_PZSlide控件
	@提供四种种幻灯片效果，水平滚动（scrollx）,垂直滚动（scrolly）,渐入(fade)和单一切换效果(none)
	@可通过自由更改css来实现自己的样式(幻灯片大小，索引按钮样式.......)
	@time:2013-05-21
	@address:品质365
	@调用方法PZ_Slide.init($(".J_PZSlide"));将控件className传入，即可初始化多个独立的控件
	*/
	function PZ_Slide(slide){
		var _this_=this;
		//保存独立的幻灯片控件元素
		this.slide=slide;
		//保存幻灯片对象,这里注意上下文对象
		this.slideBox=$(".slide-content",slide);
		//保存幻灯片的每一帧
		this.frames=this.slideBox.children();
		//如果幻灯片数量大于1的时候创建对应按钮
		if(this.frames.size()>1){
			//获取幻灯片的宽和高
			this.slideWidth=this.slide.width();
			this.slideHeight=this.slide.height();
			//创建按钮对象
			this.btnsBox=$("<ol class='items'></ol>");
			//将创建好的按钮列表，插入到幻灯片
			this.creatBtns();
			//获取dom结构中的配置参数
			this.config=$.parseJSON(this.slide.attr("data-widget-config"));
			//设定动画的默认效果
			this.config.effect=this.config.effect || "none";
			//设定动画的默认时长
			this.config.duration=this.config.duration*1000 || "slow";
			//注册事件,如果配置参数里没有配置，则默认为click事件
			this.btnsBox.children().bind(this.config.triggerType||"click",function(){
				var _this=this,index=$(_this).index();
				if(!$(this).hasClass("actived")){
					//将自己的索引值设置到计数器上
					_this_.loop=index;
					//如果是鼠标hover事件，就设置延时
					if(_this_.config.triggerType=="mouseover"){
						t=window.setTimeout(function(){
							_this_.initAnimate(index);
						},200);
					}else{
						_this_.initAnimate(index);	
					};	
				};
			});
			//如果是鼠标hover事件，就设置延时执行
			if(this.config.triggerType=="mouseover"){
				var t;
				this.btnsBox.children().mouseout(function(){
				window.clearTimeout(t);
				});
			};
			//如果设定了动画自动播放时间，就初始化自动播放
			if(this.config.autoTime){
				//保存按钮的个数
				this.btnsLength=this.btnsBox.children().length;
				this.config.autoTime=this.config.autoTime*1000 || 200;
				//给自动播放动画定义计数器
				this.loop=0;
				//给自动播放动画定义时间戳
				this.autoT=null;
				//执行自动播放
				this.autoPlay();
				//当鼠标置于幻灯片上时，自动播放停止
				this.slideBox.mouseover(function(){
					window.clearInterval(_this_.autoT);
				}).mouseout(function(e){
					try{
						if(e.relatedTarget.tagName!="LI"){
							_this_.autoPlay();
						};
					}catch(e){
						
					};
				});
			};
		};
	};
	PZ_Slide.prototype={
		//创建对应按钮列表
		creatBtns:function(){
			var _this=this;
			//循环添加按钮
			this.frames.each(function(i,e){
				_this.btnsBox.append("<li>"+(i+1)+"</li>");	
			});
			//按钮创建完毕，插入到幻灯片控件
			this.slide.append(this.btnsBox);
			//将第一个按钮添加class
			this.btnsBox.children().eq(0).addClass("actived");
		},
		//执行动画
		animatePlayX:function(index){
			var dir=this.isDir(index),marginLeft=dir=="+"?"-":"+";
			var _this=this;
			//把对应的帧设置到偏移值，并显示
			this.frames.eq(index).css({left:dir+this.slideWidth+"px",display:"block"});
			this.slideBox.animate({marginLeft:marginLeft+this.slideWidth+"px"},this.config.duration,this.config.easing||"linear",function(){
				//当动画执行完毕后，还原
				_this.frames.eq(index).css("left",0).siblings().css({left:0,display:"none"});
				_this.slideBox.css("marginLeft",0);
				//标识为当前按钮样式
				_this.changeStyle(index);
			});
		},
		animatePlayY:function(index){
			var dir=this.isDir(index),marginTop=dir=="+"?"-":"+";
			var _this=this;
			//把对应的帧设置到偏移值，并显示
			this.frames.eq(index).css({top:dir+this.slideHeight+"px",display:"block"});
			this.slideBox.animate({marginTop:marginTop+this.slideHeight+"px"},this.config.duration,this.config.easing||"linear",function(){
				//当动画执行完毕后，还原
				_this.frames.eq(index).css("top",0).siblings().css({top:0,display:"none"});
				_this.slideBox.css("marginTop",0);
				//标识为当前按钮样式
				_this.changeStyle(index);
			});
		},
		animatePlay:function(index){
			this.frames.eq(index).show().siblings().hide();
			this.changeStyle(index);	
		},
		animatePlayFade:function(index){
			this.frames.eq(index).fadeIn(this.config.duration,this.config.easing||"linear").siblings().fadeOut(this.config.duration,this.config.easing||"linear");
			this.changeStyle(index);	
		},
		initAnimate:function(index){
			//绑定对应的效果,执行动画
			switch(this.config.effect){
				case "none":
					this.animatePlay(index);
					break;
				case "scrollx":
					this.animatePlayX(index);
					break;
				case "scrolly":
					this.animatePlayY(index);
					break;
				case "fade":
					this.animatePlayFade(index);
					break;
				};
		},
		//判断鼠标的触发次序，是当前选中的前面还是后面，返回-1和1，表示前后
		isDir:function(curIndex){
			var old=this.btnsBox.children(".actived").index();
			return old>curIndex?"-":"+";
		},
		//改变按钮的当前样式
		changeStyle:function(index){
			this.btnsBox.children().eq(index).addClass("actived").siblings().removeClass("actived");
		},
		autoPlay:function(){
			var _this=this;
			this.autoT=window.setInterval(function(){
				_this.loop++;
				//如果计数值大于按钮的个数时，设为0
				if(_this.loop>_this.btnsLength-1){
					_this.loop=0;
				};
				_this.btnsBox.children().eq(_this.loop).trigger(_this.config.triggerType||"click");
			},this.config.autoTime);
		}	
	};
	PZ_Slide.init=function(slides){
			var _this=this;
			//循环把页面中的J_PSlide幻灯片控件传递给PZ_Slide
			slides.each(function(){
					new _this($(this));
				});
	};
	PZ_Slide.init($(".J_PZSlide"));
});